home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2001 September / PC-WELT 9-2001.ISO / software / hw / brennen / flask_src.exe / Audio / AudFrameBuffer.cpp next >
Encoding:
C/C++ Source or Header  |  2000-05-06  |  2.5 KB  |  113 lines

  1. // AudFrameBuffer.cpp: implementation of the CAudFrameBuffer class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "AudFrameBuffer.h"
  6.  
  7. //////////////////////////////////////////////////////////////////////
  8. // Construction/Destruction
  9. //////////////////////////////////////////////////////////////////////
  10.  
  11. CAudioFrame::CAudioFrame(ui8               *data,
  12.                          ui32               datasize,
  13.                          TAudFramePresInfo *pInfo, 
  14.                          CAudioFrame       *next, 
  15.                          CAudioFrame       *previous){
  16.     if(this->data = new ui8[datasize] ){
  17.         memcpy( this->data, data, datasize );
  18.         this->datasize = datasize;
  19.     }
  20.     else{
  21.         this->data = NULL;
  22.         datasize   = 0;
  23.     }
  24.     mpeg_layer = 0;
  25.     memcpy( &this->pInfo, pInfo, sizeof(TAudFramePresInfo) );
  26.     this->next     = next;
  27.     this->previous = previous;
  28.  
  29.     
  30. }
  31. CAudioFrame::~CAudioFrame(){
  32.     if(data)
  33.         delete data;
  34. }
  35. CAudFrameBuffer::CAudFrameBuffer()
  36. {
  37.     this->firstFrame = NULL;
  38.     this->lastFrame  = NULL;
  39.         n_frames       = 0;
  40. }
  41.  
  42. CAudFrameBuffer::~CAudFrameBuffer()
  43. {
  44.     CAudioFrame *temp;
  45.     while(lastFrame!=NULL){
  46.         temp = lastFrame->previous;
  47.         delete lastFrame;
  48.         lastFrame = temp;
  49.     }
  50. }
  51.  
  52. int CAudFrameBuffer::AddFrame(ui8 *data, ui32 datasize, TAudFramePresInfo *pInfo)
  53. {
  54.     CAudioFrame *temp;
  55.  
  56.     if( lastFrame==NULL && firstFrame==NULL)
  57.         firstFrame=lastFrame= new CAudioFrame(data, datasize, pInfo, NULL, NULL);
  58.     else{
  59.         temp = lastFrame;
  60.         // create new frame
  61.         lastFrame = new CAudioFrame(data, datasize, pInfo, NULL, temp);
  62.         temp->next = lastFrame;
  63.         if(lastFrame)
  64.             lastFrame->previous = temp;
  65.     }
  66.     n_frames++;
  67.     
  68.     return 1;
  69. }
  70.  
  71. int CAudFrameBuffer::RemoveFirstFrame()
  72. {
  73.     CAudioFrame *temp;
  74.     if(firstFrame){
  75.         if(!firstFrame->next)
  76.             lastFrame = NULL;
  77.         temp = firstFrame->next;
  78.         delete firstFrame;
  79.         firstFrame = temp;
  80.         if(firstFrame)
  81.             firstFrame->previous=NULL;
  82.         n_frames--;
  83.         return 1;
  84.     }
  85.     else return 0;
  86. }
  87.  
  88. int CAudFrameBuffer::RemoveFrame(CAudioFrame *frame)
  89. {
  90.     CAudioFrame *previous, *next;
  91.     if(frame){
  92.         previous = frame->previous;
  93.             next = frame->next;
  94.  
  95.         delete frame;
  96.  
  97.         if(previous)
  98.             previous->next = next;
  99.         else //previous was null. The deleted item was the first item. Update firstFrame
  100.             firstFrame = next;
  101.  
  102.         if(next)
  103.             next->previous = previous;
  104.         else //next was null. The deleted item was the last item. Update lastFrame
  105.             lastFrame = previous;
  106.  
  107.         n_frames--;
  108.     
  109.         return 1;
  110.     }
  111.     return 0;
  112. }
  113.